package cn.kattomy.shop.vo;

import java.util.List;

/**
 * 封装翻页信息的 Page 类
 * @author kattomy
 *
 */
public class Page<T> {
	//当前的页码
	private int pageNo;
	//当前页面的 List 对象
	private List<T> list;
	//每页显示的记录数
	private int pageSize;
	//查询所得的记录总数
	private long totalItemNo;
	
	/**
	 * 构造器中需要对 pageNo 进行初始化,初始化 当前页码&每页显示的记录数&总记录数
	 * @param pageNo 当前的页码
	 * @param pageSize 每页显示的记录数
	 * @param totalItemNo 总记录数
	 */
	public Page(int pageNo, int pageSize, long totalItemNo) {
		this.pageNo = pageNo;
		this.pageSize = pageSize;
		this.totalItemNo =totalItemNo;
	}

	/**
	 * 获取当前页码
	 * @return int 当前页码
	 */
	public int getPageNo() {
		if (pageNo < 0)
			pageNo = 1;
		
		if (pageNo > getTotalPageNo()) 
			pageNo = getTotalPageNo();
	
		return pageNo;
	}

	public void setPageNo(int pageNo) {
		pageNo = pageNo;
	}

	/**
	 * 获取当前页面的 List<T> 对象
	 * @return  List<T>
	 */
	public List<T> getList() {
		return list;
	}

	public void setList(List<T> list) {
		this.list = list;
	}

	/**
	 * 获取每页显示的记录数
	 * @return int 每页显示的记录数
	 */
	public int getPageSize() {
		return pageSize;
	}

	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}

	/**
	 * 获取查询结果总记录数
	 * @return int 总记录数
	 */
	public long getTotalItemNo() {
		return totalItemNo;
	}

	public void setTotalItemNo(long totalItemNo) {
		this.totalItemNo = totalItemNo;
	}
	
	/**
	 * 获取总页数
	 * @return int 总页数
	 */
	public int getTotalPageNo(){
		
		int totalPageNo = (int) (totalItemNo/pageSize);
		
		if (totalPageNo % pageSize != 0) {
			totalPageNo++;
		}
		
		return totalPageNo;
	}
	
	/**
	 * 判断是否存在前一页
	 * @return 存在true,不存在falses
	 */
	public boolean isHasPre() {
		if (getPageNo() > 1) {
			return true;
		}
		return false;
	}
	
	/**
	 * 获取前一页
	 * @return int 前一页
	 */
	public int getPrevPage() {
		if (isHasPre()) {
			return getPageNo() - 1;
		}
		return getPageNo();
	}
	
	/**
	 * 判断是否存在下一页
	 * @return 存在true,不存在false
	 */
	public boolean isHasNext() {
		if (getPageNo() < getTotalPageNo()) {
			return true;
		}
		return false;
	}
	
	/**
	 * 获取下一页
	 * @return int 下一页
	 */
	public int getNextPage() {
		if (isHasNext()) {
			return getPageNo() + 1;
		}
		return getPageNo();
	}
}
